package com.wzl.day4;

/**
 * @author wuzhilang
 * @Title: day4
 * @ProjectName questions
 * @Description: TODO
 * @date 7/19/20193:17 PM
 */

import java.util.Stack;

/**
 * 今日的题目来自于leecode的150题
 * 根据逆波兰表示法，求表达式的值。
 *
 * 有效的运算符包括 +, -, *, / 。每个运算对象可以是整数，也可以是另一个逆波兰表达式。
 *
 * 说明：
 *
 * 整数除法只保留整数部分。
 * 给定逆波兰表达式总是有效的。换句话说，表达式总会得出有效数值且不存在除数为 0 的情况。
 * 示例 1：
 *
 * 输入: ["2", "1", "+", "3", "*"]
 * 输出: 9
 * 解释: ((2 + 1) * 3) = 9
 * 示例 2：
 *
 * 输入: ["4", "13", "5", "/", "+"]
 * 输出: 6
 * 解释: (4 + (13 / 5)) = 6
 * 示例 3：
 *
 * 输入: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
 * 输出: 22
 * 解释:
 *   ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
 * = ((10 * (6 / (12 * -11))) + 17) + 5
 * = ((10 * (6 / -132)) + 17) + 5
 * = ((10 * 0) + 17) + 5
 * = (0 + 17) + 5
 * = 17 + 5
 * = 22
 */
public class Day4 {
	class Solution {
		public int evalRPN(String[] tokens) {
			Stack<Integer> stack = new Stack();
			for (int i = 0; i < tokens.length; i++) {
				if (!(tokens[i].equals("+") || tokens[i].equals("-") || tokens[i].equals("*") || tokens[i].equals("/"))) {
					int num = Integer.parseInt(tokens[i]);
					stack.add(num);
				} else {
					int a = stack.pop();
					int b = stack.pop();
					int temp;
					switch (tokens[i]) {
						case "+":
							temp = b + a;
							break;
						case "-":
							temp = b - a;
							break;
						case "*":
							temp = b * a;
							break;
						case "/":
							temp = b / a;
							break;
						default:
							return 0;
					}
					stack.add(temp);
				}
			}
			return stack.pop();
		}



	}

}
